using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.IO;
using System.IO.IsolatedStorage;
using System.Linq;
using System.Windows.Media.Imaging;
using System.Xml.Linq;
namespace INTEX.DataBase.CE
{
    public partial class Mapper
    {
    /*
      var qABFOLGE = from m in mtemp.ABFOLGE select m;
       DBMapper.MapABFOLGE(qABFOLGE.ToList(), true);
       */
        public List<ABFOLGE> MapABFOLGE(XElement item2, bool mergedb)
        {
            List<ABFOLGE> result = new List<ABFOLGE>();
            var item4 = from item3 in item2.Elements()
                        select new ABFOLGE
                        {  
                            MAINKEY = (string)item3.Element("MAINKEY"),
                            ABFMANDANT = (string)item3.Element("ABFMANDANT"),
                            ABFAUFKRS = (string)item3.Element("ABFAUFKRS"),
                            ABFAUFLFD = (string)item3.Element("ABFAUFLFD"),
                            ABFAUFPOS = (string)item3.Element("ABFAUFPOS"),
                            ABFAFOLGE = (string)item3.Element("ABFAFOLGE"),
                            ABFAGANG = (string)item3.Element("ABFAGANG"),
                            ABFBZAGANG = (string)item3.Element("ABFBZAGANG"),
                            ABFSOLLSTART = (string)item3.Element("ABFSOLLSTART"),
                            ABFSOLLDAT = (string)item3.Element("ABFSOLLDAT"),
                            PHOTO = (string)item3.Element("PHOTO")
                        }; 
                        
          result = item4.ToList();
          MapABFOLGE(result, mergedb);
          return result;
        }
        ///DBMapper.MapABFOLGE(mtemp.ABFOLGE.ToList<ABFOLGE>(), true);        
       public void MapABFOLGE(List<ABFOLGE> result, bool mergedb)
        {
          if (mergedb)
            {     
            
                int loaded = 0;
                int page = 500;
                int count = result.Count();
                while (true)
                {
                    if (count - loaded < page) 
                    {
                        page = count - loaded;
                    }
                    var query =
                        (from ABFOLGE row in result.AsQueryable()
                         select row).Skip(loaded).Take(page);
               var rowsexist = from u in LocalDB.ABFOLGE.ToList().AsQueryable()
                                           join uc in query.AsQueryable() on  u.MAINKEY equals  uc.MAINKEY
                                           select u;
                LocalDB.ABFOLGE.DeleteAllOnSubmit(rowsexist);
                LocalDB.SubmitChanges();
                LocalDB.ABFOLGE.InsertAllOnSubmit(query);
                LocalDB.SubmitChanges();
                 loaded += page;
                if (count == loaded)
                        break;
                }
            }
       }
    }
    [Table(Name = "ABFOLGE")]
    public class ABFOLGE : TBBASE
    {
        private string _MAINKEY = "0";
        [Column(IsPrimaryKey = true, CanBeNull = false)]
        public string MAINKEY
        {
            get
            {
                return _MAINKEY;
            }
            set
            {
                if (value != _MAINKEY)
                {
                    _MAINKEY = value;
                    NotifyPropertyChanging("MAINKEY");                 
                }
            }
        }
        private string _Photo = "YES";
        [Column]
        public string PHOTO
        {
            get
            {
                return _Photo;
            }
            set
            {
                if (value != _Photo)
                {
                    _Photo = value;
                    NotifyPropertyChanging("PHOTO");
                }
            }
        } 
        [Column(IsVersion = true)]
        private Binary _version;
   
        private string  _ABFMANDANT="0";
        [Column]
        public string ABFMANDANT
        {
            get
            {
                return _ABFMANDANT;
            }
            set
            {
                if (value != _ABFMANDANT)
                {
                     _ABFMANDANT = value;
                    NotifyPropertyChanged("ABFMANDANT");
                }
            }
        }
        private string  _ABFAUFKRS="0";
        [Column]
        public string ABFAUFKRS
        {
            get
            {
                return _ABFAUFKRS;
            }
            set
            {
                if (value != _ABFAUFKRS)
                {
                     _ABFAUFKRS = value;
                    NotifyPropertyChanged("ABFAUFKRS");
                }
            }
        }
        private string  _ABFAUFLFD="0";
        [Column]
        public string ABFAUFLFD
        {
            get
            {
                return _ABFAUFLFD;
            }
            set
            {
                if (value != _ABFAUFLFD)
                {
                     _ABFAUFLFD = value;
                    NotifyPropertyChanged("ABFAUFLFD");
                }
            }
        }
        private string  _ABFAUFPOS="0";
        [Column]
        public string ABFAUFPOS
        {
            get
            {
                return _ABFAUFPOS;
            }
            set
            {
                if (value != _ABFAUFPOS)
                {
                     _ABFAUFPOS = value;
                    NotifyPropertyChanged("ABFAUFPOS");
                }
            }
        }
        private string  _ABFAFOLGE="0";
        [Column]
        public string ABFAFOLGE
        {
            get
            {
                return _ABFAFOLGE;
            }
            set
            {
                if (value != _ABFAFOLGE)
                {
                     _ABFAFOLGE = value;
                    NotifyPropertyChanged("ABFAFOLGE");
                }
            }
        }
        private string  _ABFAGANG="0";
        [Column]
        public string ABFAGANG
        {
            get
            {
                return _ABFAGANG;
            }
            set
            {
                if (value != _ABFAGANG)
                {
                     _ABFAGANG = value;
                    NotifyPropertyChanged("ABFAGANG");
                }
            }
        }
        private string  _ABFBZAGANG="0";
        [Column]
        public string ABFBZAGANG
        {
            get
            {
                return _ABFBZAGANG;
            }
            set
            {
                if (value != _ABFBZAGANG)
                {
                     _ABFBZAGANG = value;
                    NotifyPropertyChanged("ABFBZAGANG");
                }
            }
        }
        private string  _ABFSOLLSTART="0";
        [Column]
        public string ABFSOLLSTART
        {
            get
            {
                return _ABFSOLLSTART;
            }
            set
            {
                if (value != _ABFSOLLSTART)
                {
                     _ABFSOLLSTART = value;
                    NotifyPropertyChanged("ABFSOLLSTART");
                }
            }
        }
        private string  _ABFSOLLDAT="0";
        [Column]
        public string ABFSOLLDAT
        {
            get
            {
                return _ABFSOLLDAT;
            }
            set
            {
                if (value != _ABFSOLLDAT)
                {
                     _ABFSOLLDAT = value;
                    NotifyPropertyChanged("ABFSOLLDAT");
                }
            }
        }
      public void ConvertToFile(IsolatedStorageFile ISO,ObservableCollection<ABFOLGE> ListInput, string filep = "", string setguid="")
        {           
            try
            {
                string localfile = filep;
                if (filep.Trim() == "")
                {
                    if (setguid.Trim() == "")
                        setguid = Guid.NewGuid().ToString();
                    localfile = "Data\\PhoneDB\\ABFOLGE\\ABFOLGE" +setguid + ".xml";
                }
                string folder = "Data\\PhoneDB\\ABFOLGE" ;
                if (!ISO.DirectoryExists(folder))
                {
                    ISO.CreateDirectory(folder);
                }
                ISO.DeleteFile(localfile);
                StreamWriter sw = new StreamWriter(ISO.CreateFile(localfile));
                XDocument xdoc = new XDocument();
                //Root Element
                XElement root = new XElement("ABFOLGE");
                if (setguid.Trim() != "")
                {
                    root = new XElement("ITX"+setguid);
                }
                //Add root to file
                xdoc.Add(root);
                foreach (ABFOLGE row in ListInput)
                {
                    XElement f = new XElement("ABFOLGE");
                    XElement MAINKEY = new XElement("MAINKEY");
                     f.Add(MAINKEY);
                   
                        XElement ABFMANDANT = new XElement("ABFMANDANT");
                         ABFMANDANT.Value = row.ABFMANDANT;
                          f.Add(ABFMANDANT);
                        XElement ABFAUFKRS = new XElement("ABFAUFKRS");
                         ABFAUFKRS.Value = row.ABFAUFKRS;
                          f.Add(ABFAUFKRS);
                        XElement ABFAUFLFD = new XElement("ABFAUFLFD");
                         ABFAUFLFD.Value = row.ABFAUFLFD;
                          f.Add(ABFAUFLFD);
                        XElement ABFAUFPOS = new XElement("ABFAUFPOS");
                         ABFAUFPOS.Value = row.ABFAUFPOS;
                          f.Add(ABFAUFPOS);
                        XElement ABFAFOLGE = new XElement("ABFAFOLGE");
                         ABFAFOLGE.Value = row.ABFAFOLGE;
                          f.Add(ABFAFOLGE);
                        XElement ABFAGANG = new XElement("ABFAGANG");
                         ABFAGANG.Value = row.ABFAGANG;
                          f.Add(ABFAGANG);
                        XElement ABFBZAGANG = new XElement("ABFBZAGANG");
                         ABFBZAGANG.Value = row.ABFBZAGANG;
                          f.Add(ABFBZAGANG);
                        XElement ABFSOLLSTART = new XElement("ABFSOLLSTART");
                         ABFSOLLSTART.Value = row.ABFSOLLSTART;
                          f.Add(ABFSOLLSTART);
                        XElement ABFSOLLDAT = new XElement("ABFSOLLDAT");
                         ABFSOLLDAT.Value = row.ABFSOLLDAT;
                          f.Add(ABFSOLLDAT);
                  root.Add(f);
                }
                sw.Write(xdoc);
                sw.Close();
                sw.Dispose();
            }
            catch (Exception ex)
            { 
            }
      
        }                                        
    }
}
